<?php

class OrganizacionesController extends Zend_Controller_Action
{

    public function init()
    {
	//Verifica que el usuario ha iniciado sesion
	if (Zend_Session::namespaceIsset('Usuario') == false)
        {
            $this->_redirect('login');
        }
        $registry = Zend_Registry::getInstance();
        $this->em = $registry->entitymanager;
    }

    public function indexAction()
    {
        // action body
    }

    public function crearAction()
    {
        if (X\CheckAccess::PageAction('Organizaciones.crear')) return;
    }

    public function ajaxCrearAction()
    {

       if (X\CheckAccess::AjaxAction($this, 'Organizaciones.crear')) return;

        try{
            
	    //Cargar los datos del formulario
            $tipo       = $this->_request->getPost('Tipo');
            $categoria  = $this->_request->getPost('Categoria');
            $frecuencia = $this->_request->getPost('Frecuencia');
            $razon      = $this->_request->getPost('razon');
            $ruc        = $this->_request->getPost('ruc');
            $direccion  = $this->_request->getPost('direccion');
            $localidad  = $this->_request->getPost('localidad');
            $telefono   = $this->_request->getPost('tel');
            $celular    = $this->_request->getPost('cel');
            $fax        = $this->_request->getPost('fax');
            $email      = $this->_request->getPost('email');
            $web        = $this->_request->getPost('web');
            $contacto   = $this->_request->getPost('contacto');
            $obs        = $this->_request->getPost('obs');

            // verificar
            $cantidad = $this->em->createQueryBuilder()
            ->select ('count(d.codigoOrganizacion)')
            ->from ('Default_Model_OrganizacionesExternas', 'd')
            ->where ("d.razonSocial='".pg_escape_string($razon)."'")
            ->getQuery ()
            ->getSingleScalarResult();

            if ($cantidad > 0){
            X\Msg::Failure('Ya existe una organizacion con este nombre.');
            return;
            }

		
            // crear
            $org = new Default_Model_OrganizacionesExternas();

            $org->setTipoOrganizacion($tipo);
            $org->setCategoriaOrganizacion($categoria?$categoria:null);
            $org->setFrecuenciaContacto($frecuencia?$frecuencia:null);
            $org->setRazonSocial($razon);
            $org->setRUC($ruc);
            $org->setDireccion($direccion);
            $org->setLocalidad($localidad);
            $org->setTelefono($telefono);
            $org->setCelular($celular);
            $org->setFax($fax);
            $org->setEmail($email);
            $org->setSitioWeb($web);
            $org->setNombreContacto($contacto);
            $org->setObservaciones($obs);

            // guardar
            $this->em->persist($org);
            $this->em->flush();

            X\Msg::Success('La organización se ha creado con éxito.');
        }
        catch(Exception $e){
            X\Msg::Failure('Error al crear la organización.'.$e->getMessage());
        }
    }
	
    public function listarAction()
    {
        if (X\CheckAccess::PageAction('Organizaciones.listar')) return;

        try{
            // obtener los datos
            $org = $this->em->createQueryBuilder()
                    ->select         ('o.codigoOrganizacion')
                    ->addselect      ('o.razonSocial')
                    ->addselect      ('o.tipoOrganizacion')
                    ->addselect      ('o.categoriaOrganizacion')
                    ->addselect      ('o.frecuenciaContacto')
                    ->addselect      ('o.nombreContacto')
                    ->addselect      ('o.telefono')
                    ->addselect      ('o.celular')
                    ->addselect      ('o.fax')
                    ->addselect      ('o.direccion')
                    ->addselect      ('o.localidad')
                    ->from           ('Default_Model_OrganizacionesExternas', 'o')
                    ->orderBy        ('o.razonSocial', 'asc')
                    ->setFirstResult (0)
                    ->setMaxResults  (15)
                    ->getQuery       ()
                    ->execute        ();

            // Para mapear el valor entero a su nombre correspondiente
		$i=0;
		$total= count($org);
		while ( $i < $total ){
		    if( $org[$i]['tipoOrganizacion']==0 )
			$org[$i]['tipoOrganizacion']='Cliente';
		    if( $org[$i]['tipoOrganizacion']==1 )
			$org[$i]['tipoOrganizacion']='Proveedor';
		    if( $org[$i]['tipoOrganizacion']==2 )
			$org[$i]['tipoOrganizacion']='Ambos';
                    
                    if( isset($org[$i]['categoriaOrganizacion'])==false )
                        $org[$i]['categoriaOrganizacion']='';
                    elseif( $org[$i]['categoriaOrganizacion']==0 )
			$org[$i]['categoriaOrganizacion']='Empresa/Institucional';
		    if( $org[$i]['categoriaOrganizacion']==1 )
			$org[$i]['categoriaOrganizacion']='Persona física';

                    if( isset($org[$i]['frecuenciaContacto'])==false )
                        $org[$i]['frecuenciaContacto']='';
		    elseif( $org[$i]['frecuenciaContacto']==0 )
			$org[$i]['frecuenciaContacto']='Habitual';
		    if( $org[$i]['frecuenciaContacto']==1 )
			$org[$i]['frecuenciaContacto']='Ocasional';
		    if( $org[$i]['frecuenciaContacto']==2 )
			$org[$i]['frecuenciaContacto']='Temporal/Contractual';
		    $i++;
		}

            $cantidad = $this->em->createQueryBuilder()
                    ->select   ('count(o.codigoOrganizacion)')
                    ->from     ('Default_Model_OrganizacionesExternas', 'o')
                    ->getQuery ()
                    ->getSingleScalarResult();

            // convertir a json
            $this->view->jsondata = Zend_Json::encode(Array(
                "success" => true,
                "total"   => $cantidad,
                "rows"    => $org
            ));
        }
        catch(Exception $e){
            $this->view->error = 'Error al cargar las organizaciones.';
        }
    }

    public function ajaxListarAction()
    {
        if (X\CheckAccess::AjaxAction($this, 'Organizaciones.listar')) return;

        $start = $this->_request->getPost("start") ? $this->_request->getPost("start") : 0;
        $limit = $this->_request->getPost("limit") ? $this->_request->getPost("limit") : 25;
        $sort  = $this->_request->getPost("sort")  ? $this->_request->getPost("sort")  : 'codigoOrganizacion';
        $dir   = $this->_request->getPost("dir")   ? $this->_request->getPost("dir")   : 'ASC';

        try{
            // obtener los parametros
            $start = $this->_request->getPost("start");
            $limit = $this->_request->getPost("limit");
            $sort  = $this->_request->getPost("sort");
            $dir   = $this->_request->getPost("dir");

            // parametros por defecto
            $sort = isset($sort)? $sort : 'razonSocial';
            $dir  = isset($dir)?  $dir  : 'asc';

            // obtener los datos
            $org = $this->em->createQueryBuilder()
                 ->select         ('o.codigoOrganizacion')
                 ->addselect      ('o.razonSocial')
                 ->addselect      ('o.tipoOrganizacion')
                 ->addselect      ('o.categoriaOrganizacion')
                 ->addselect      ('o.frecuenciaContacto')
                 ->addselect      ('o.nombreContacto')
                 ->addselect      ('o.telefono')
                 ->addselect      ('o.celular')
                 ->addselect      ('o.fax')
                 ->addselect      ('o.direccion')
                 ->addselect      ('o.localidad')
                 ->from           ('Default_Model_OrganizacionesExternas', 'o')
                 ->orderBy        ("o.$sort", $dir)
                 ->setFirstResult ($start)
                 ->setMaxResults  ($limit)
                 ->getQuery       ()
                 ->execute        ();

            // Para mapear el valor entero a su nombre correspondiente
		$i=0;
		$total= count($org);
		while ( $i < $total ){
		    if( $org[$i]['tipoOrganizacion']==0 )
			$org[$i]['tipoOrganizacion']='Cliente';
		    if( $org[$i]['tipoOrganizacion']==1 )
			$org[$i]['tipoOrganizacion']='Proveedor';
		    if( $org[$i]['tipoOrganizacion']==2 )
			$org[$i]['tipoOrganizacion']='Ambos';
		    if( $org[$i]['categoriaOrganizacion']==0 )
			$org[$i]['categoriaOrganizacion']='Empresa/Institucional';
		    if( $org[$i]['categoriaOrganizacion']==1 )
			$org[$i]['categoriaOrganizacion']='Persona física';
		    if( $org[$i]['frecuenciaContacto']==0 )
			$org[$i]['frecuenciaContacto']='Habitual';
		    if( $org[$i]['frecuenciaContacto']==1 )
			$org[$i]['frecuenciaContacto']='Ocasional';
		    if( $org[$i]['frecuenciaContacto']==2 )
			$org[$i]['frecuenciaContacto']='Temporal/Contractual';
		    $i++;
		}

            $cantidad = $this->em->createQueryBuilder()
                    ->select   ('count(o.codigoOrganizacion)')
                    ->from     ('Default_Model_OrganizacionesExternas', 'o')
                    ->getQuery ()
                    ->getSingleScalarResult();

            // crear la respuesta en json
            echo Zend_Json::encode(Array(
                "success" => true,
                "total"   => $cantidad,
                "rows"    => $org
            ));
        }
        catch(Exception $e){
            X\Msg::Failure('Error al listar las organizaciones.');
        }
    }
	
    public function editarAction(){
        if (X\CheckAccess::PageAction('Organizaciones.editar')) return;

        try{
            // obtener los parametros
            $id = $this->_request->getQuery('id');

            // obtener los datos
            $this->view->organizacion = $this->em->find('Default_Model_OrganizacionesExternas', $id);
        }
        catch(Exception $e){
            $this->view->error = 'Error al cargar la organización.';
        }
    }
	
    public function ajaxEditarAction(){

        if (X\CheckAccess::AjaxAction($this, 'Organizaciones.editar')) return;

        try{
            // obtener los parametros
            $codigo=      $this->_request->getPost('codigoOrg');
            $razon =      $this->_request->getPost('razon');
            $direccion =  $this->_request->getPost('direccion');
            $localidad =  $this->_request->getPost('localidad');
            $tipo =       $this->_request->getPost('Tipo');
            $categoria =  $this->_request->getPost('Categoria');
            $frecuencia = $this->_request->getPost('Frecuencia');
            $ruc =        $this->_request->getPost('ruc');
            $telefono =   $this->_request->getPost('tel');
            $celular =    $this->_request->getPost('cel');
            $fax =        $this->_request->getPost('fax');
            $email =      $this->_request->getPost('email');
            $web =        $this->_request->getPost('web');
            $contacto =   $this->_request->getPost('contacto');
            $obs =        $this->_request->getPost('obs');

            
            // verificar
            $cantidad = $this->em->createQueryBuilder()
                    ->select   ('count(o.codigoOrganizacion)')
                    ->from     ('Default_Model_OrganizacionesExternas', 'o')
                    ->where    ("o.razonSocial ='".pg_escape_string($razon)."'")
                    ->andWhere ("o.codigoOrganizacion<>$codigo")
                    ->getQuery ()
                    ->getSingleScalarResult();

            if ($cantidad > 0){
                X\Msg::Failure('Esta organización ya existe.');
                return;
            }

            // obtener y modificar el objeto
            $org = $this->em->find('Default_Model_OrganizacionesExternas', $codigo);

            // cargar
            $org->setTipoOrganizacion($tipo);
            $org->setCategoriaOrganizacion($categoria?$categoria:null);
            $org->setFrecuenciaContacto($frecuencia?$frecuencia:null);
            $org->setRazonSocial($razon);
            $org->setRUC($ruc);
            $org->setDireccion($direccion);
            $org->setLocalidad($localidad);
            $org->setTelefono($telefono);
            $org->setCelular($celular);
            $org->setFax($fax);
            $org->setEmail($email);
            $org->setSitioWeb($web);
            $org->setNombreContacto($contacto);
            $org->setObservaciones($obs);

            // guardar
            $this->em->persist($org);
            $this->em->flush();

            X\Msg::Success('La organización se ha creado con éxito.');
        }
        catch(Exception $e){
            X\Msg::Failure('Error al crear la organización.'.$e->getMessage());
        }
    }
	
    public function eliminarAction()
    {
        // action body
    }

    public function ajaxEliminarAction()
    {

        if (X\CheckAccess::AjaxAction($this, 'Organizaciones.eliminar')) return;

        try{
            // obtener los parametros
            $id = $this->_request->getPost('id');

            // obtener el objeto
            $org = $this->em->find('Default_Model_OrganizacionesExternas', $id);

            // guardar el objeto
            $this->em->remove($org);
            $this->em->flush();

            X\Msg::Success('La organización se ha eliminado con éxito.');
        }
        catch(Exception $e){
            X\Msg::Failure('Error al eliminar la organización.'.$e->getMessage());
        }
    }
    

    public function ajaxListarProveedorAction()
    {
        try{
        // obtener los datos
        $org = $this->em->createQueryBuilder()
        ->select ('o.codigoOrganizacion')
        ->addselect ('o.razonSocial')
        ->addselect ('o.tipoOrganizacion')
        ->addselect ('o.categoriaOrganizacion')
        ->addselect ('o.frecuenciaContacto')
        ->addselect ('o.nombreContacto')
        ->addselect ('o.telefono')
        ->addselect ('o.celular')
        ->addselect ('o.fax')
        ->addselect ('o.direccion')
        ->addselect ('o.localidad')
        ->from ('Default_Model_OrganizacionesExternas', 'o')
        ->where ('o.tipoOrganizacion=1 or o.tipoOrganizacion=2')
        ->orderBy ('o.razonSocial', 'asc')
        ->getQuery ()
        ->execute ();

        // crear la respuesta en json
        echo Zend_Json::encode(Array(
        "success" => true,
        "total" => count($org),
        "rows" => $org
        ));
        }
        catch(Exception $e){
        X\Msg::Failure('Error al listar las organizaciones.');
        }
     }
}

